﻿
namespace MudEngine.Parsing.AST
{
    public interface IAstNodeVisitor<in C>
    {
        void VisitBinaryExpression(BinaryExpression binaryExpression, C ctx);

        void VisitAssignmentExpression(AssignmentExpression assignmentStatement, C ctx);

        void VisitBlockStatement(BlockStatement blockStatement, C ctx);

        void VisitWhileStatement(WhileStatement whileStatement, C ctx);

        void VisitCompilationUnit(CompilationUnit compilationUnit, C ctx);

        void VisitUnaryExpression(UnaryExpression unaryExpression, C ctx);

        void VisitIdentifierExpression(IdentifierExpression identifierExpression, C ctx);

        void VisitConstantExpression(ConstantExpression constantExpression, C ctx);

        void VisitUsingDeclaration(UsingDeclaration usingDeclaration, C ctx);

        void VisitInheritDeclaration(InheritDeclaration inheritDeclaration, C ctx);

        void VisitFunctionDeclaration(FunctionDeclaration functionDeclaration, C ctx);

        void VisitFieldDeclaration(FieldDeclaration fieldDeclaration, C ctx);

        void VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration, C ctx);

        void VisitVariableDeclarationStatement(VariableDeclarationStatement variableDeclarationStatement, C ctx);

		void VisitCaseLabel(CaseLabel caseLabel, C ctx);

		void VisitSwitchSectionNode(SwitchSectionNode switchSectionNode, C ctx);

		void VisitIfElseExpression(IfElseExpression ifElseExpression, C ctx);

		void VisitExpressionStatement(ExpressionStatement expressionStatement, C ctx);

		void VisitCastExpression(CastExpression castExpression, C ctx);

		void VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, C ctx);

		void VisitForStatement(ForStatement forStatement, C ctx);

		void VisitReturnStatement(ReturnStatement returnStatement, C ctx);

		void VisitBreakStatement(BreakStatement breakStatement, C ctx);

		void VisitContinueStatement(ContinueStatement continueStatement, C ctx);

		void VisitDoWhileStatement(DoWhileStatement doWhileStatement, C ctx);

		void VisitInvocationExpression(InvocationExpression invocationExpression, C ctx);

		void VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, C ctx);

		void VisitEnumDeclaration(EnumDeclaration enumDeclaration, C ctx);

		void VisitParameterDeclaration(ParameterDeclaration parameterDeclaration, C ctx);

		void VisitDynamicParameterDeclaration(DynamicParameterDeclaration dynamicParameterDeclaration, C ctx);

		void VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression, C ctx);

		void VisitIndexedIdentifierExpression(IndexedIdentifierExpression indexedIdentifierExpression, C ctx);

		void VisitSwitchStatement(SwitchStatement switchStatement, C ctx);

        void VisitLambdaExpression(LambdaExpression lambdaExpression, C ctx);

        void VisitMapExpression(MapInitializerExpression mapExpression, C ctx);

        void VisitCatchExpression(CatchExpression catchExpression, C ctx);

        void VisitForEachStatement(ForEachStatement forEachStatement, C ctx);
    }
}
